package cl.usm.acceso.bean;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.faces.component.html.HtmlDataTable;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import cl.usm.acceso.dao.PrendaDAO;
import cl.usm.acceso.dao.RegistraDAO;
import cl.usm.acceso.dao.ServicioDAO;

public class RegistroServicioBean {

	// Orden vars
	private int nroOrden;
	private int total;
	
	// Prenda vars
	private List<PrendaBean> prendas;
	private PrendaBean prenda;
	private String tipoPrenda;
	private HtmlDataTable prendaTable;
	
	// Servicio vars
	private List<PrendaServicioBean> prendaServicios;
	private PrendaServicioBean prendaServicio;
	private int idPrenda;
	private int cantidad;
	private int idServicio;
	private String descripcion;
	private int monto;
	private HtmlDataTable prendaServicioTable;
	private int selectedItem;
	private String retorno;
	
	// Constructor
	public RegistroServicioBean() {
	}
		
	// Orden methods
	public int getNroOrden() {
		return nroOrden;
	}

	public void setNroOrden(int nroOrden) {
		this.nroOrden = nroOrden;
	}

	public int getTotal() {
		total = 0;
		for (PrendaServicioBean p : prendaServicios) {
			total += p.getMonto();
		}
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	// Prenda methods
	public List<PrendaBean> getPrendas() {
		return prendas;
	}

	public void setPrendas(List<PrendaBean> prendas) {
		this.prendas = prendas;
	}

	public PrendaBean getPrenda() {
		return prenda;
	}

	public void setPrenda(PrendaBean prenda) {
		this.prenda = prenda;
	}

	public int getIdPrenda() {
		return idPrenda;
	}

	public void setIdPrenda(int idPrenda) {
		this.idPrenda = idPrenda;
	}

	public String getTipoPrenda() {
		return tipoPrenda;
	}

	public void setTipoPrenda(String tipoPrenda) {
		this.tipoPrenda = tipoPrenda;
	}

	public int getCantidad() {
		return cantidad;
	}

	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}

	public HtmlDataTable getPrendaTable() {
		return prendaTable;
	}

	public void setPrendaTable(HtmlDataTable prendaTable) {
		this.prendaTable = prendaTable;
	}

	public List<PrendaBean> getListaPrendas() {
		PrendaDAO prenda = new PrendaDAO();
		prendas = prenda.getListaPrendas(nroOrden);
		return prendas;
   }
	
	public String seleccionPrenda() {
		prenda = (PrendaBean) prendaTable.getRowData();
		idPrenda = prenda.getIdPrenda();
		tipoPrenda = prenda.getTipoPrenda();
		cantidad = prenda.getCantidad();
		return Integer.toString(idPrenda);
	}
	
	// Prenda-Servicio methods
	public List<PrendaServicioBean> getPrendaServicios() {
		return prendaServicios;
	}

	public void setPrendaServicios(List<PrendaServicioBean> prendaServicios) {
		this.prendaServicios = prendaServicios;
	}
	
	public PrendaServicioBean getPrendaServicio() {
		return prendaServicio;
	}

	public void setPrendaServicio(PrendaServicioBean prendaServicio) {
		this.prendaServicio = prendaServicio;
	}

	public int getIdServicio() {
		return idServicio;
	}

	public void setIdServicio(int idServicio) {
		this.idServicio = idServicio;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public int getMonto() {
		return monto;
	}

	public void setMonto(int monto) {
		this.monto = monto;
	}

	public HtmlDataTable getPrendaServicioTable() {
		return prendaServicioTable;
	}

	public void setPrendaServicioTable(HtmlDataTable prendaServicioTable) {
		this.prendaServicioTable = prendaServicioTable;
	}
	
	public List<PrendaServicioBean> getListaPrendaServicios() {
		PrendaServicioBean prendaServicio = new PrendaServicioBean();
		prendaServicio.setNroOrden(nroOrden);
		prendaServicios = prendaServicio.getListaPrendaServicio();
		return prendaServicios;
   }
	
	public String seleccionPrendaServicio() {
		prendaServicio = (PrendaServicioBean) prendaServicioTable.getRowData();
		idPrenda = prendaServicio.getIdPrenda();
		cantidad = prendaServicio.getCantidad();
		idServicio = prendaServicio.getIdServicio();
		descripcion = prendaServicio.getDescripcion();
		monto = prendaServicio.getMonto();
		return Integer.toString(idPrenda);
	}
	
	public int getSelectedItem() {   
	    if (selectedItem == 0) {   
	        selectedItem = 1; // This will be the default selected item.   
	    }
	    idServicio = selectedItem;
	    return selectedItem;   
	}   
	    
	public void setSelectedItem(int selectedItem) {
		idServicio = selectedItem;
	    this.selectedItem = selectedItem;   
	}   
	    
	public List<SelectItem> getSelectItems() {
		ServicioDAO servicio = new ServicioDAO();
	    List<SelectItem> selectItems = new ArrayList<SelectItem>();   
		for (ServicioBean s : servicio.getListaServicios()) {
			selectItems.add(new SelectItem(s.getIdServicio(), s.getDescripcion()));
		}
	    return selectItems;   
	}
	
	public String getRetorno() {
		return retorno;
	}

	public void setRetorno(String retorno) {
		this.retorno = retorno;
	}

	// Registra methods: prenda-servicio relation for an order
	public void orden(ActionEvent accion) {
		FacesContext context = FacesContext.getCurrentInstance();
		Map<String, String> map = context.getExternalContext().getRequestParameterMap();
		String numeroOrden = (String) map.get("numeroOrden");
		if (numeroOrden != null) {
			nroOrden = Integer.valueOf(numeroOrden);
			setRetorno("registrarServicio");
		} else {
			setRetorno("");
		}
	}

	public void agregar(ActionEvent accion) {
		RegistraDAO registra = new RegistraDAO();
		if (registra.agregar(idPrenda, idServicio) == 1) {
			prendaServicios = getListaPrendaServicios();
			setRetorno("ok");
		} else {
			setRetorno("error");
		}
	}
		
	public String eliminar() {
		prendaServicio = (PrendaServicioBean) prendaServicioTable.getRowData();
		idPrenda = prendaServicio.getIdPrenda();
		RegistraDAO registra = new RegistraDAO();
		if (registra.eliminar(idPrenda) == 1) {
			return Integer.toString(1);			
		} else {
			return Integer.toString(0);
		}
	}
	
}
